package Figuras;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;

public class Elipse extends FiguraConRelleno {

    private double ejeMayorDeLaElipse;
    private double ejeMenorDeLaElipse;

    // Funciones Básicas para creación y uso de la Figura:
    public Elipse(Point2D puntoDeInicio, double ejeMayor, double ejeMenor,
            Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(puntoDeInicio, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarElRadioMayorDeLaElipse(ejeMayor);
        fijarElRadioMenorDeLaElipse(ejeMenor);
    }

    public Elipse(int coordenadaX, int coordenadaY, double ejeMayor, double ejeMenor,
            Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(coordenadaX, coordenadaY, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarElRadioMayorDeLaElipse(ejeMayor);
        fijarElRadioMenorDeLaElipse(ejeMenor);
    }

    @Override
    public void dibujarLaFigura(Graphics dibujarElipse) {
        Graphics2D dibujarElipse2D;
        Ellipse2D elipse;
        Stroke bordeDeLaElipse;
        if (dameElColorDelQueEstaRellenada() != null) {
            dibujarElipse.setColor(dameElColorDelQueEstaRellenada());
            dibujarElipse.fillOval((int) dameElInicioDeLaFigura().getX(), (int) dameElInicioDeLaFigura().getY(),
                    (int) dameElEjeMayorDeLaElipse(), (int) dameElEjeMenorDeLaElipse());
        }
        elipse = new Ellipse2D.Float((int) dameElInicioDeLaFigura().getX(), (int) dameElInicioDeLaFigura().getY(),
                (int) dameElEjeMayorDeLaElipse(), (int) dameElEjeMenorDeLaElipse());
        dibujarElipse2D = (Graphics2D) dibujarElipse;
        bordeDeLaElipse = new BasicStroke(dameElGrosorDelBordeDeLaFigura(), BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER);
        dibujarElipse2D.setColor(dameElColorDelBorde());
        dibujarElipse2D.setStroke(bordeDeLaElipse);
        dibujarElipse2D.draw(elipse);
    }

    @Override
    public boolean estaDentroDelAreaDeDibujo(int coordenadaX, int coordenadaY) {
        boolean estaDentro = false;
        boolean x1 = coordenadaX > dameElInicioDeLaFigura().getX();
        boolean x2 = coordenadaX < (dameElInicioDeLaFigura().getX() + dameElEjeMayorDeLaElipse());
        boolean y1 = coordenadaY > dameElInicioDeLaFigura().getY();
        boolean y2 = coordenadaY < (dameElInicioDeLaFigura().getY() + dameElEjeMenorDeLaElipse());
        if (x1 && x2 && y1 && y2) {
            estaDentro = true;
        }
        return estaDentro;
    }

    @Override
    public void fijarPosicionDeLaFigura(int coordenadaX, int coordenadaY) {
        fijarElInicioDeLaFigura(coordenadaX, coordenadaY);
    }

    // Funciones Lógicas de la Figura:
    public final double dameElEjeMayorDeLaElipse() {
        return ejeMayorDeLaElipse;
    }

    public final double dameElEjeMenorDeLaElipse() {
        return ejeMenorDeLaElipse;
    }

    public final void fijarElRadioMayorDeLaElipse(double ejeMayor) {
        this.ejeMayorDeLaElipse = ejeMayor;
    }

    public final void fijarElRadioMenorDeLaElipse(double ejeMenor) {
        this.ejeMenorDeLaElipse = ejeMenor;
    }
}
